package com.yangchuang.openpicture.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;

/**
 * 用户核心信息表
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName(value = "`user`")
public class User implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID（自增）
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用户名（后端随机生成，登录后可修改）
     */
    @TableField(value = "username")
    private String username;

    /**
     * 邮箱（唯一标识，不可重复）
     */
    @TableField(value = "email")
    private String email;

    /**
     * 性别：0-女，1-男，2-未知
     */
    @TableField(value = "gender")
    private Integer gender;

    /**
     * 密码（需用Bcrypt等强哈希算法存储，禁止明文）
     */
    @TableField(value = "`password`")
    private String password;

    /**
     * 头像URL（新用户默认头像，支持后续上传修改）
     */
    @TableField(value = "avatar")
    private String avatar;

    /**
     * 账号状态： 0 正常 1被禁止上传图片 2无法登录（封号）
     */
    @TableField(value = "`status`")
    private Integer status;

    /**
     * 用户角色：0-普通用户，1-管理员
     */
    @TableField(value = "user_role")
    private Integer userRole;

    /**
     * 账号创建时间（自动填充）
     */
    @TableField(value = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date createTime;

    /**
     * 账号更新时间（修改时自动更新）
     */
    @TableField(value = "update_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
    private Date updateTime;

    /**
     * 逻辑删除：0-正常，1-删除（MyBatis-Plus自动过滤）
     */
    @TableField(value = "is_deleted")
    @TableLogic(value = "0", delval = "1")
    private Integer isDeleted;
}